#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QDebug>
#include <QMainWindow>
#include <QVector>
#include <QString>
#include <QPair>
#include <QPixmap>
#include <QFileDialog>
#include <QGraphicsPixmapItem>
#include <QMessageBox>
#include <QLabel>

#include <opencv2/opencv.hpp>

#include "mygraphicsview.h"
#include "roi.h"
#include "taskthread.h"
#include "treepictool.h"

using namespace cv;

#pragma execution_character_set("utf-8")

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void mainUIandSlots();

    void updatePicItem();                           // 更新缩略图
    void updateGraphicsView(QPixmap &pixmap);       // 更新场景里的图

private slots:
    void on_actionOpen_triggered();     // 打开文件
    void on_actionSave_triggered();     // 保存文件
    void on_actionSaveAs_triggered();   // 文件另存为
    void on_actionImport_triggered();   // 导入文件
    void on_actionExport_triggered();   // 导出文件
    void on_listWidgetPic_itemClicked(QListWidgetItem *item);   // 缩略图选择

    // ---------- ROI ----------
    void createROIRect();               // 矩形
    void createROICircle();             // 圆形
    void createROIEllipse();            // 椭圆
    void createROIRotateRect();         // 旋转矩形
    void createROIPolygon();            // 多边形
    void upROIMask();

    // ---------  线程  ----------
    void threadUpdateScene(int Num);    // 刷新不同线程之间的场景
    void on_dealBtn_clicked();          // 全部勾选
    void on_cancelBtn_clicked();        // 全部取消
    void on_addTasklistBtn_clicked();   // 添加任务栏
    void on_delTasklistBtn_clicked();   // 删除任务栏
    void on_loopBtn_clicked();          // 循环执行
    void on_loopCancelBtn_clicked();    // 取消循环
    void TabCurrentChange(int index);

    // ---------  UI更新  ----------
    void updateTaskItem(int);                   // 创建任务对象的UI
    void updatePicture(bool click, int Num);

private:
    Ui::MainWindow *ui;
    QList<taskThread*> m_taskThreads;   // 线程集

};
#endif // MAINWINDOW_H
